package busterminal.command;

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Абстрактный класс - предок всех команд
 */
public abstract class AbstractCommand {

    /**
     * Имя команды
     */
    private String name;
    /**
     * Параметры для команды - имя параметра и его значение
     */
    protected Map<String, String> parameters = new HashMap<String, String>();

    /**
     * Параметризованный конструктор
     * @param name имя команды
     */
    public AbstractCommand(String name) {
        this.name = name;
    }

    /**
     * Получить имя команды
     * @return имя команды
     */
    public String getName() {
        return name;
    }

    /**
     * Установить значение параметра
     * @param paramName имя параметра
     * @param paramValue значение параметра
     */
    public void setParameter(String paramName, String paramValue) {
        parameters.put(paramName, paramValue);
    }

    /**
     * Получить список имён параметров
     * @return
     */
    public List<String> getParametersNames() {
        return Collections.<String>emptyList();
    }

    /**
     * Выполнить команду
     */
    public abstract void execute();

    /**
     * Вывести список доступных вариантов параметра с фиксированным набором значений
     * @param parameterName имя параметра с фиксированным набором значений
     */
    public void showAccessableVariants(String parameterName) {
    }
}
